package com.feri.fitness.us.listener;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.feri.fitness.common.config.RocketMQConfig;
import com.feri.fitness.common.dto.MqLevelMsg;
import com.feri.fitness.us.dao.UserLevelDao;
import com.feri.fitness.us.dao.UserMessageDao;
import com.feri.fitness.us.domain.UserLevel;
import com.feri.fitness.us.domain.UserMessage;
import com.feri.fitness.us.service.intf.PlusOrderService;
import com.feri.fitness.us.type.MessageType;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 邢朋辉
 * @Date: 2023/1/10 11:36
 */
@Component //IOC创建
@RocketMQMessageListener(topic = RocketMQConfig.MQ_GROW,consumerGroup = "userlevelpro")
public class UserLevelListener implements RocketMQListener<String> {

    private Logger logger= LoggerFactory.getLogger(UserLevelListener.class);
    @Resource
    private UserLevelDao levelDao;
    @Resource
    private UserMessageDao messageDao;

    @Override
    public void onMessage(String s) {
        MqLevelMsg msg= JSON.parseObject(s,MqLevelMsg.class);
        logger.info("开始处理：用户成长值变化消息");
        //8.给予成长值（根据套餐的金额 10倍成长值奖励）
        UserLevel level=levelDao.selectOne(new QueryWrapper<UserLevel>().eq("uid",msg.getUid()));
        level.setGrow(level.getGrow()+msg.getGrow());
        //验证是否满足升级条件
        double l=10*Math.pow(10,level.getLevel());
        if(level.getGrow()>l){
            //满足升级条件
            level.setLevel(getLevel(level.getGrow()));
            //发送消息
            messageDao.insert(new UserMessage(msg.getUid(), MessageType.等级消息.getVal(),
                    "恭喜你，升级了，当前等级"+level.getLevel()));
        }
        levelDao.updateById(level);

        messageDao.insert(new UserMessage(msg.getUid(), MessageType.成长值消息.getVal(),
                msg.getMsg()));

        logger.info("结束处理：用户成长值变化消息");
    }
    private int getLevel(int grow){
        for(int i=1;i<7;i++){
            double min=Math.pow(10,i);
            double max=Math.pow(10,i+1);
            if(grow>min && grow<max){
                return i;
            }
        }
        return 1;
    }
}
